macos: dont send crossing events during grab
authorChristian Hergert <chergert@redhat.com>
Wed, 14 Oct 2020 21:08:23 +0000 (14:08 -0700)
committerChristian Hergert <chergert@redhat.com>
Wed, 14 Oct 2020 22:45:50 +0000 (15:45 -0700)
Fixes an issue where we can't drag scrollbars or text selections while
outside of the application window.

gdk/macos/gdkmacosdisplay-translate.c

index 50497320f78f4135f38ed356c0b033ee31215bb4..41b738f99d6e6c2791c1d8af1bf1a768bd09ad90 100644 (file)
@@ -1120,10 +1120,21 @@ _gdk_macos_display_translate (GdkMacosDisplay *self,
       break;
 
     case NSEventTypeMouseExited:
-      [[NSCursor arrowCursor] set];
-      /* fallthrough */
     case NSEventTypeMouseEntered:
-      ret = synthesize_crossing_event (self, surface, nsevent, x, y);
+      {
+        GdkSeat *seat = gdk_display_get_default_seat (GDK_DISPLAY (self));
+        GdkDevice *pointer = gdk_seat_get_pointer (seat);
+        GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (GDK_DISPLAY (self), pointer);
+
+        if (grab == NULL)
+          {
+            if (event_type == NSEventTypeMouseExited)
+              [[NSCursor arrowCursor] set];
+
+            ret = synthesize_crossing_event (self, surface, nsevent, x, y);
+          }
+      }
+
       break;
 
     case NSEventTypeKeyDown: